*****************************************************************
AUTOMATSKI TESTER RADOVA - Autor: Aleksandar Kartelj (2013) v1.1
*****************************************************************

Tester je napisan u cistom Bash script jeziku. 

Struktura direktorijuma je sledeca:
	a) test1.sh
	b) testn.sh
	c) testall.sh
	d) primer_upotrebe
	e) UPUTSTVO_ZA_UPOTREBU.txt (ovaj fajl)
	f) tofile.sh - pomocni program

**********************************************************************
test1.sh 
**********************************************************************
Sluzi za testiranje samo jedne C datoteke sa jednim test primerom.
Da bi istestirali njegovo ponasanje probajte da ukucate:

>./test1.sh "primer_upotrebe/radovi/Student1/1.c" k{1k} u{4u} i{5i} 
>DA

ili 

>./test1.sh "primer_upotrebe/radovi/Student1/1.c" k{4k} u{5u} i{5i}  
>NE

Program dat u primeru uzima jedan broj kao argument komandne linije, a 
drugi sa standardnog ulaza i rezultat ispisuje na standardni izlac. 

Podaci koji se upisu u region k{...k} su argumenti komandne linije.
Oni koji se upisu izmedju u{...u} su argumenti standardnog ulaza, 
i konacno izmedju i{...i} je dat ocekivani izlaz. 

U prvom slucaju je vracen odgovor DA jer je 1+4=5, a u drugom NE jer 4+5!=5



**********************************************************************
testn.sh
**********************************************************************
Ovaj izvrsni skript sluzi da se istestira ceo niz test primera za zadatu C datoteku. Npr.:

>./testn.sh primer_upotrebe/radovi/Student1/1.c primer_upotrebe/1.t 
>/home/aca/test2/tester, primer_upotrebe/radovi/Student1/1.c, el:1, pts:8, uk:8

Ovde se vidi da je za direktoriju Student1, program 1.c prosao eliminacioni
test primer i preostalih 8 test primera. Pritom su test primeri zadati u
fajlu primer_upotrebe/1.t koji izgleda ovako:

k{19k} u{644u} i{663i}
|
k{20k} u{645u} i{665i}
|
k{23k} u{642u} i{665i}
|
k{19k} u{100u} i{119i}
|
k{19k} u{-21u} i{-2i}
|
k{19k} u{-9u} i{10i}
|
k{19k} u{0u} i{19i}
|
k{19k} u{-7u} i{12i}
|
k{0k} u{644u} i{644i}
|

Prvi u nizu test primera je eliminacioni, a ostali se broje u poene. 

Ukoliko se kao poslednji argument pri pozivu ubaci opcija -v, tester ce prikazivati
u toku izvrsavanja koji su test primeri prosli a koji nisu. 

>./testn.sh primer_upotrebe/radovi/Student1/1.c primer_upotrebe/1.t -v
>1 : DA
>2 : DA
>3 : DA
>4 : DA
>5 : DA
>6 : DA
>7 : DA
>8 : DA
>9 : DA
>/home/aca/test2/tester, primer_upotrebe/radovi/Student1/1.c, el:1, pts:8, uk:8

**********************************************************************
testall.sh
**********************************************************************
Ovaj skript testira kompletan direktorijum sa radovima veceg broja studenata. 
Npr. ako hocemo da proverimo sve radove u direktorijumu primer_upotrebe/radovi,
mozemo to uciniti na sledeci nacin:

>./testall.sh primer_upotrebe/radovi/ "1.c" primer_upotrebe/1.t 
/home/aca/test2/tester/primer_upotrebe/radovi/Student1, 1.c, el:1, pts:8, uk:8
/home/aca/test2/tester/primer_upotrebe/radovi/Student2, 1.c, el:1, pts:8, uk:8

Ovde vidimo da su oba studenta imali tacan zadatak 1.c. Rezultati se upisuju
u datoteku rezultati.csv koja se nalazi u aktivnom direktorijumu, tj. direktorijumu
iz kog se pokrece ./testall.sh

Ukoliko je za kompilaciju potrebno ukljuciti math biblioteku, poziv se menja u:
>./testall.sh primer_upotrebe/radovi/ "1.c -lm" primer_upotrebe/1.t

Ipak, sa opcijom -lm treba biti pazljiv, jer neki kompajleri implicitno ukljucuju
-lm, pa dodatno ukljucivanje napravi problem, i pregledac onda ne radi korektno.

Takodje se umesto jedne .c datoteke moze upisati vise datoteka, npr:
>./testall.sh primer_upotrebe/radovi/ "1.c mojabiblioteka.c -lm" primer_upotrebe/1.t

*********************************************************************
RAD SA DATOTEKAMA
*********************************************************************

Postoji podrska i za testiranje programa koji koriste datoteke: da u njih
pisu,ili da iz njih citaju. Trenutno je postavljeno da moze biti najvise
5 ulaznih datoteka, i najvise 2 izlazne. 

Drugi zadatak u direktorijumu primer_upotrebe predstavlja jedan primer u kojem
se koristi ulazna i izlazna datoteka, kao i standardni izlaz. U zadatku je potrebno
otvoriti ulaznu datoteku, prepisati sve njene karaktere u izlaznu, a na standardni
izlaz ispisati sva slova koja se pojavljuju u ulaznoj datoteci. 

Primer poziva za jedan test primer je sledeci:

>./test1.sh primer_upotrebe/radovi/Student1/2.c "uf1[ulazni.txt]{test iz P1 uf1} if1[izlazni.txt]{test iz P1 if1} i{ 7 i}" 
DA

Ukoliko je potrebno imati vise ulaznih ili izlaznih datoteka, one se oznacavaju sa uf2, uf3 itd.,
odnosno sa if2 u slucaju izlazne.

Primer upotrebe nad vise test primera je sledeci:

>./testn.sh primer_upotrebe/radovi/Student1/2.c primer_upotrebe/2.t -v
1 : DA
2 : DA
3 : DA
4 : DA
5 : DA
6 : DA
7 : DA
8 : DA
9 : DA

Pritom je sadrzaj datoteke 2.t sledeci:

"uf1[ulazni.txt]{test iz P1 uf1} if1[izlazni.txt]{test iz P1 if1} i{ 7 i}"
|
"uf1[ulazni.txt]{P1 P2 uf1} if1[izlazni.txt]{P1 P2 if1} i{ 2 i}"
|
"uf1[ulazni.txt]{12345 uf1} if1[izlazni.txt]{12345 if1} i{ 0 i}"
|
"uf1[ulazni.txt]{_____ uf1} if1[izlazni.txt]{_____ if1} i{ 0 i}"
|
"uf1[ulazni.txt]{53289 fdslj fsdl3 324 uf1} if1[izlazni.txt]{53289 fdslj fsdl3 324 if1} i{ 9 i}"
|
"uf1[ulazni.txt]{11111 uf1} if1[izlazni.txt]{11111 if1} i{ 0 i}"
|
"uf1[ulazni.txt]{fls dslk ldks uf1} if1[izlazni.txt]{fls dslk ldks if1} i{ 11 i}"
|
"uf1[ulazni.txt]{aaaaaaaa uf1} if1[izlazni.txt]{aaaaaaaa if1} i{ 8 i}"
|
"uf1[ulazni.txt]{?_34_+fds uf1} if1[izlazni.txt]{?_34_+fds if1} i{ 3 i}
|
